package exception;
/**
 * java异常处理机制中的try-catch
 * 语法:
 * try{
 *     可能出现异常的代码片段
 * }catch(XXXException e){
 *     try中出现XXXException后的处理手段.
 * }
 *
 * try语句块:用来括上可能出现异常的代码片段.try语句块不能独立存在，后面必须跟
 * catch语句块或finally语句块.
 *
 * catch:语句块用来指定捕获try中出现的某异常并进行处理.
 */
public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始啦。。。");

        try {
//            String str = null;
//            String str = "";
            String str = "a";
            System.out.println(str.length());//当前语句出现错误，不在继续往下执行,直接跳到 catch().
            System.out.println(str.charAt(0));//StringIndexOutOfBoundsException下标越界异常
            System.out.println(Integer.parseInt(str));//NumberFormatException
            System.out.println("不要过来啊!!!");
            /*
                try语句块中当某句代码出现了异常，则之后所有的代码均不执行.
             */
//        } catch (NullPointerException e) {// NullPointerException
//            System.out.println("出现空指针异常并解决了!!!");
//        }catch (StringIndexOutOfBoundsException e){
//            System.out.println("出现下标越界异常并解决了!!!");
//        }
            /*
            可以使用多个catch分别捕获不同异常(如上面的catch操作)。也可以使用一个catch来捕获
            多个异常。区别在于:多个catch分别捕获是因为不同异常处理方式不同。而用同一个catch捕获
            多个异常是因为处理方式相同。
         */
//        }catch (NullPointerException | StringIndexOutOfBoundsException e){
//                //在最后一个catch处捕获Exception可以防止因未处理的异常导致程序中断.
//
        }catch (Exception e){
            System.out.println("就是出了个错!");
        }
        /*
            当JVM执行程序时出现了某种异常时，它便会实例化一个该异常的实例，并将程序执行过程设置到
            其中，然后将该异常抛出等待处理，若当前方法没有异常处理机制，该异常便会自动抛出到当前方
            法外，有调用当前方法的代码片段处理。如果最终异常抛给了JVM便会被杀掉，导致程序中断。
         */
        System.out.println("程序结束了...");




    }
}
